import baseApi from './baseApi';

// 小程序配置类型
export type AppType = 'mini_app';

// 小程序配置接口
export interface AppConfig {
  id: number;
  name: string;
  appId: string;
  type: AppType;
  secret: string;
  config: string[] | null;
}

// 获取小程序配置响应接口
export interface GetAppConfigResponse {
  code: number;
  message: string;
  data: AppConfig;
}

// 设置小程序配置请求参数接口
export interface SetAppConfigParams {
  appId: string;
  appSecret: string;
  type: AppType;
  name: string;
  config?: string[];
}

// 设置小程序配置响应接口
export interface SetAppConfigResponse {
  code: number;
  message: string;
  data?: AppConfig;
}

// 小程序配置服务
const appConfigService = {
  /**
   * 获取商户小程序配置
   * @returns 小程序配置信息
   */
  getAppConfig: async (): Promise<GetAppConfigResponse> => {
    try {
      const response = await baseApi.get<GetAppConfigResponse>('/admin/merchant/appConfig');
      return response.data;
    } catch (error) {
      console.error('获取小程序配置失败:', error);
      throw error;
    }
  },

  /**
   * 设置商户小程序配置
   * @param params 小程序配置参数
   * @returns 设置结果
   */
  setAppConfig: async (params: SetAppConfigParams): Promise<SetAppConfigResponse> => {
    try {
      const response = await baseApi.put<SetAppConfigResponse>('/admin/merchant/appConfig', params);
      return response.data;
    } catch (error) {
      console.error('设置小程序配置失败:', error);
      throw error;
    }
  },

  /**
   * 验证小程序配置参数
   * @param params 配置参数
   * @returns 验证结果
   */
  validateAppConfig: (params: Partial<SetAppConfigParams>): { isValid: boolean; errors: string[] } => {
    const errors: string[] = [];

    if (!params.appId) {
      errors.push('AppID不能为空');
    } else if (!/^wx[a-f0-9]{16}$/.test(params.appId)) {
      errors.push('AppID格式不正确，应为wx开头的18位字符');
    }

    if (!params.appSecret) {
      errors.push('AppSecret不能为空');
    } else if (!/^[a-f0-9]{32}$/.test(params.appSecret)) {
      errors.push('AppSecret格式不正确，应为32位十六进制字符');
    }

    if (!params.name || params.name.trim().length === 0) {
      errors.push('小程序名称不能为空');
    } else if (params.name.trim().length > 50) {
      errors.push('小程序名称不能超过50个字符');
    }

    if (!params.type) {
      errors.push('小程序类型不能为空');
    } else if (params.type !== 'mini_app') {
      errors.push('小程序类型必须为mini_app');
    }

    return {
      isValid: errors.length === 0,
      errors
    };
  },

  /**
   * 格式化小程序配置显示
   * @param config 小程序配置
   * @returns 格式化后的配置信息
   */
  formatAppConfig: (config: AppConfig) => {
    return {
      ...config,
      // 隐藏敏感信息
      secretMasked: config.secret ? `${config.secret.substring(0, 8)}****${config.secret.substring(config.secret.length - 4)}` : '',
      // 格式化配置数组
      configDisplay: config.config ? config.config.join(', ') : '无',
      // 类型显示
      typeDisplay: config.type === 'mini_app' ? '微信小程序' : config.type
    };
  }
};

export default appConfigService; 